import math 
import functools 
 
def percentile(N, percent, key=lambda x:x): 
    """ 
    Find the percentile of a list of values. 
 
    @parameter N - is a list of values. Note N MUST BE already sorted. 
    @parameter percent - a float value from 0.0 to 1.0. 
    @parameter key - optional key function to compute value from each element of N. 
 
    @return - the percentile of the values 
    """ 
    if not N: 
        return None 
    k = (len(N)-1) * percent 
    f = math.floor(k) 
    c = math.ceil(k) 
    if f == c: 
        return key(N[int(k)]) 
    d0 = key(N[int(f)]) * (k-f) 
    d1 = key(N[int(c)]) * (c-k) 
    return d0+d1 
 
# median is 50th percentile. 
median = functools.partial(percentile, percent=0.5) 
## end of http://code.activestate.com/recipes/511478/ }}}